#ifndef HISTORY__
#define HISTORY__

#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include "base.h"
#include "timer.h"


/** Trida pro ulozeni vysledku dosazeneho jednim algoritmem. Umoznuje vypis do prehledne tabulky.
 */
class HistoryField {
public:
	/** Defaultni konstruktor, nastavi vsechny parametry vysledku.
	 * \param f sirka frekvencniho pasma
	 * \param t doba vypoctu
	 * \param al_dt nastaveni algoritmu
	 * \param ar_dt nastaveni mapy
	 */
	HistoryField(int f, double t, std::string al_dt, std::string ar_dt): frequencies(f), time(t), area_detail(ar_dt), algorithm_detail(al_dt) {};
	double time; ///< doba vypoctu
	int frequencies; ///< sirka frekvencniho pasma
	std::string area_detail, ///< popis nastaveni mapy
		algorithm_detail; ///< popis nasaveni algoritmu
};

/** Historie vysledku jednotlivych testu.
 * Do pole uklada vysledky ziskane jednotlivymi algoritmy, jejich nastaveni a doby jejich vypoctu.
 * Umoznuje tisknout vysledky ve forme tabulky.
 */
class History {
public:
	double push(int f, std::string al_dt = "", std::string ar_dt = "");
	std::vector<HistoryField> results; ///< pole ulozenych vysledku
private:
	Timer timer; ///< casovac pro stopovani doby vypoctu
};

std::ostream & operator <<(std::ostream & o, const History & h);
std::ostream & operator <<(std::ostream & o, const HistoryField & h);

#endif
